package knihaprichodu;

import javax.swing.JOptionPane;
import java.io.*;
import java.util.*;
import knihaprichodu.frm.ChyboveOkno;

/**
 * Nacteni udaju z knihy a zapis udaje do knihy
 * @author Petrus Pavel
 */
public class ZapisDoKnihy {

    private ChyboveOkno chyboveOkno = new ChyboveOkno();

    /**
     * Zapsani udaje do knihy prichodu a odchodu
     * @param jmeno - String jmeno souboru, kam se zapisuje
     * @param udaj - String jez obsahuje naformatovany casovy udaj, jez se ma zapsat
     */
    public void vypisSoubor(String jmeno, String udaj) {
        File fwJmeno = new File(jmeno);
        FileWriter fw = null;

        if (fwJmeno.exists() == false) {
            try {
                fwJmeno.createNewFile();
            } catch (IOException e) {
                JOptionPane.showMessageDialog(null, e.getLocalizedMessage(), "Neslo vytvorit soubor pro zapis", JOptionPane.ERROR_MESSAGE);
            }
        }
        try {
            fw = new FileWriter(fwJmeno, true);
            fw.write(udaj);
            fw.close(); //uzavreni souboru

        } catch (IOException e) {
            JOptionPane.showMessageDialog(null, e.getLocalizedMessage(), "Neslo vytvorit soubor pro zapis", JOptionPane.ERROR_MESSAGE);
        }
    }

     /**
     * Nacita vsechny udaje ze souboru
     * @param jmeno - jmeno souboru, ktery obsahuje knihu prichodu
     * @return - Arraylist se vsema udaji, ktere jsou v souboru
     */
    public ArrayList<String> nactiUdaj(String jmeno) {
        File frJmeno = new File(jmeno);
        FileReader fr = null;
        BufferedReader in;
        String pom;
        ArrayList<String> lUdaju = new ArrayList<String>();

        //Zjisteni, zda soubor existuje a kdyz ne, tak se ho pokusim vytvorit
        if (Kontrola.jeSoubor(jmeno) == false) {
            try {
                frJmeno.createNewFile();
            } catch (IOException e) {
                JOptionPane.showMessageDialog(null, e.getLocalizedMessage(), "Neslo vytvorit soubor", JOptionPane.ERROR_MESSAGE);
            }
        }


        try {
            fr = new FileReader(frJmeno);
            in = new BufferedReader(fr);
            pom = "a";

            //nacitani souboru po radce
            while (pom != null) {
                pom = in.readLine();

                if (pom != null) { //osetreni nebot je \n na konci souboru
                    lUdaju.add(pom); //pridani Stringu do ArrayListu
                }
            }
            in.close();//uzavreni souboru
        } catch (IOException e) {
            JOptionPane.showMessageDialog(null, e.getLocalizedMessage(), "Spatna prace se souborem", JOptionPane.ERROR_MESSAGE);
        } finally {
            //in.close();//to tu nejde, protoze je to v jinem bloku
        }
        return lUdaju;
    }

    /**
     * Kontrola zadaneho vstupu s porovnanim s predchozim zaznamem.
     * @param stav - string Prichod ci Odchod
     * @param casy - zadane casy int[5] - den,mesic,rok,hodina,minuta
     * @param casy2 - casy z posledniho zaznamu int[6]- stav(1-Prichod,2-Odchod),den,mesic,rok,hodina,minuta
     * @return - boolean, true - vse souhlasi, false - nesouhlas casu
     */
    public boolean KontrolaVstupu(String stav, int[] casy, int[] casy2) {
        //stav, casy - zadany stav, casy2 - posledni zaznam v knize
        boolean jeVstupOK = true;
        ChyboveOkno chyOk = new ChyboveOkno();

        if ((casy2[0] == 2) & (stav.equalsIgnoreCase("Odchod"))) {
            jeVstupOK = false;
            chyOk.getChyba().setText("Zadavate \"Odchod\", ale posledni zaznam je \"Odchod\"! ");
            chyOk.setVisible(true);
        }


        if ((casy2[0] == 1) & (stav.equalsIgnoreCase("Prichod"))) {
            jeVstupOK = false;
            chyOk.getChyba().setText("Zadavate \"Prichod\", ale posledni zaznam je \"Prichod!\"");
            chyOk.setVisible(true);

        }

        //souhlas dne prichodu a odchodu
        //  den, mesic, rok
        if ((stav.equalsIgnoreCase("Odchod")) && ((casy[0] != casy2[1]) || (casy[1] != casy2[2]) || (casy[2] != casy2[3]))) {
            jeVstupOK = false;
            chyOk.getChyba().setText("Nesouhlasi den prichodu a odchodu!");
            chyOk.setVisible(true);
        }

        if (stav.equalsIgnoreCase("Odchod")) {
            if (casy[3] == casy2[4]) {
                if (casy[4] < casy2[5]) {
                    jeVstupOK = false;
                    chyOk.getChyba().setText("Na minuty jste odesli driv nez prisli!");
                    chyOk.setVisible(true);
                }
            }

            if (casy[3] < casy2[4]) {
                jeVstupOK = false;
                chyOk.getChyba().setText("Na hodiny jste odesli driv nez prisli!");
                chyOk.setVisible(true);
            }
        }
        return jeVstupOK;
    }
}
